<?php

/* 
 * Table/InstructionPaieGroupTable.php
 */

namespace RHX\Model\Table;

use Zend\Db\TableGateway\AbstractTableGateway;
use Zend\Db\Adapter\Adapter;
use Zend\Db\ResultSet\ResultSet;
use RHX\Model\Object\InstructionPaieGroup;

class InstructionPaieGroupTable extends AbstractTableGateway{
    protected $table = 'rh_instruction_paie_group';
    /**
     * Constructeur
     * 
     * @param \Zend\Db\Adapter\Adapter $adapter
     */
    public function __construct(Adapter $adapter){
	$this->adapter = $adapter;
	$this->resultSetPrototype	 = new ResultSet();
	$this->resultSetPrototype->setArrayObjectPrototype(new InstructionPaieGroup($adapter));
	$this->initialize();
    }
    
    /**
     * Récupérer un groupe d'instruction de paie
     * 
     * @param int $id
     * @return InstructionPaieGroup
     */
    public function get($id){
	return $this->select(array('id' => $id))
		->current();
    }
    
    /**
     * Tous les enregistrements
     * 
     * @param string $order
     * @return Result
     */
    public function getAll($order = 'id ASC'){
	return $this->select(function(\Zend\Db\Sql\Select $select)use($order){
	    $select->order($order);
	});
    }
    
    /**
     * Tous les groupes d'instruction de paie par site
     * 
     * @param int $site
     * @param string $order
     * @return InstructionPaieGroup
     */
    public function getAllBySite($site, $order = "periode_id DESC"){
	return $this->select(function(\Zend\Db\Sql\Select $select)use($site, $order){
	    $where = new \Zend\Db\Sql\Where();
	    $where->equalTo('site_id', $site);
	    $select->where($where);
	    $select->order($order);
	});
    }
    
    /**
     * Tous les groupes d'instruction de paie par période
     * 
     * @param int $periode
     * @param int $site
     * @param string $order
     * @return InstructionPaieGroup
     */
    public function getAllByPeriodeAndSite($periode, $site, $order = "id DESC"){
	return $this->select(function(\Zend\Db\Sql\Select $select)use($periode, $site, $order){
	    $where = new \Zend\Db\Sql\Where();
	    $where->equalTo('periode_id', $periode);
	    $where->equalTo('site_id', $site);
	    $select->where($where);
	    $select->order($order);
	});
    }
    
    /**
     * Effacer un groupe d'instruction de paie
     * 
     * @param int $id
     * @return int
     */
    public function erase($id){
	return $this->delete(array('id' => $id));
    }
    
    /**
     * Récupérer les instructions de paie à partir du groupe
     * 
     * @param int $instrId
     * @return \RHX\Model\Object\InstructionPaie
     */
    public function getInstructions($instrId){
	$table = new InstructionPaieTable($this->adapter);
	return $table->select(function(\Zend\Db\Sql\Select $select)use($instrId){
	    $where = new \Zend\Db\Sql\Where();
	    $where->equalTo('group', $instrId);
	    $select->where($where);
	});
    }
    
    /**
     * Sauvegarder un enregistrement
     * 
     * @param \RHX\Model\Object\InstructionPaieGroup $group
     * @return int|null
     */
    public function save(InstructionPaieGroup $group){
	$data = array(
	    'libelle' => $group->libelle,
	    'description' => $group->description,
	    'periode_id' => (int)$group->periode_id,
	    'site_id' => (int)$group->site_id,
	);
	$id = (int)$group->id;
	if($id == 0){
	    $this->insert($data);
	    return $this->getLastInsertValue();
	}elseif($this->get($id)){
	    $this->update($data, array('id' => $id));
	    return $id;
	}else{
	    return null;
	}
    }
}